C 수준에서 루비 객체는 데이터와 동작을 분리하는 포인터 기반 계층 구조로 표현됩니다. 데이터와 동작을 분리합니다 포인터 기반 계층 구조를 통해 이루어집니다. klass 포인터는 인스턴스를 그 '연관된 클래스'(메서드가 위치한 곳)에 연결하며, super 포인터는 클래스를 부모 클래스들과 연결하여, 루비 가상 머신이 상속을 해결하는 데 사용하는 구조적 맵을 만듭니다.
1. klass 포인터 및 플래그
모든 루비 객체는 klass 포인터와 비트 마스크인 플래그를 포함한 헤더를 갖습니다. 이러한 플래그는 객체의 내부 상태를 식별하며, 예를 들어 자동 생성된 '가상 클래스'에 'V'를 표시해 단일 메서드 할당을 처리합니다. 'V' 단일 메서드 할당을 처리하기 위해 사용됩니다.
2. 상태와 로직의 분리 (도형 24.1)
lucille과 같은 인스턴스는 자신의 고유한 lucille 을 저장하지만, 자체적으로 메서드를 갖고 있지 않습니다. 인스턴스 변수그러나 klass 포인터는 가상 머신을 Guitar 클래스 객체의 메서드 테이블로 안내합니다.
3. 상속 체인
lucille.play() 호출 시, 루비는 lucille.play() 포인터를 따라갑니다. 만약 klass Guitar에 메서드가 존재하지 않으면, Guitar포인터를 따라 super 까지 이동하여 Object에 접근할 수 있게 해줍니다. clone 또는 dup.
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>